package com.sykj.servies.impl;

import com.sykj.dao.RoleDao;
import com.sykj.dao.UserRoleDao;
import com.sykj.pojo.*;
import com.sykj.servies.LoginServies;
import com.sykj.servies.RoleServies;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

@Service
public class RoleServiesImpl implements RoleServies{
    @Autowired
    RoleDao roleDao;

    @Autowired
    LoginServies loginServies;
    @Autowired
    UserRoleDao userRoleDao;
    //得到所有角色
    @Override
    public Set<String> listRoleNames(String userName) {
       Set<String> result=new HashSet<>();
       //查询管理员角色
        List<Role> roles=listRoles(userName);
        for (Role role:roles){
            //把name添加到set集合中
            result.add(role.getName());
        }
        //返回集合
        return result;
    }


    @Override
    public List<Role> listRoles(String userName) {
        //查询相对应的角色
        List<Role> roles=new ArrayList<>();
        //通过name获得user实体
        User user=loginServies.getByname(userName);
        if (null==user)
            return roles;
        //获取当前管理员的所有角色实体
        roles = listRoles(user);
        return roles;
    }

    //获取管理员的所有角色实体
    @Override
    public List<Role> listRoles(User user) {
        List<Role> roles=new ArrayList<>();
        //通过管理员id获取管理员的角色
        UserRoleExample example = new UserRoleExample();
        example.createCriteria().andUidEqualTo(user.getId());
        //关联查询  查出用户id对应的角色id的记录
        List<UserRole> userRoles =userRoleDao.selectByExample(example);
        //通过关联查询 ，查出表Role的给出指定主键id的记录
        for (UserRole userRole : userRoles){
            Role role = roleDao.selectByPrimaryKey(userRole.getRid());
            roles.add(role);
        }
        return roles;
    }
    @Override
    public List<Role> list() {
        RoleExample example =new RoleExample();
        example.setOrderByClause("id desc");
        return roleDao.selectByExample(example);
    }

    //添加角色
    @Override
    public void add(Role role) {
        roleDao.insert(role);
    }
    //根据id删除角色
    @Override
    public void delete(Long id) {
        roleDao.deleteByPrimaryKey(id);
    }
    //根据id查询角色
    @Override
    public Role get(Long id) {
        return roleDao.selectByPrimaryKey(id);
    }
    //修改
    @Override
    public void update(Role role) {
        roleDao.updateByPrimaryKeySelective(role);
    }

}
